package com.gk.guinyote;

import java.util.Arrays;

import com.gk.guinyote.Baraja.Carta;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class PruebaActivity extends Activity{
	Button b0,resuelve,vermano,canta,cambia;
	EditText et0;
	TextView tvCartasBaraja, tvTriunfo, tvRondas, tvJugador;
	TextView[] tvcm; //TextView cartas en mano
	TextView[] tvj;  //TextView jugadas
	LinearLayout ll_h_col2, ll_h_col3;
	Partida p;
	Jugada[] jugadas;
	Jugada ganadora_actual;
	int numJugadas,idJugadorUltimaBaza;
	
	public void showToast(String logmsj, String msj){
		Toast toast = Toast.makeText(this.getApplicationContext(), msj, Toast.LENGTH_SHORT);
		toast.show();
		Log.d(logmsj,msj);
	}
	
	private void nuevaJugada(int num) {
		jugadas[numJugadas] = new Jugada(p.getJugadorActual(),p.getJugadorActual().getMano().get(num));
		//showToast("Jugada",p.getJugadorActual().toString() + " juega " + p.getJugadorActual().getMano().get(num));
		tvj[numJugadas].setText("J"+(p.getJugadorActual().getId()+1)+":"+p.getJugadorActual().getMano().get(num));
		
		p.getJugadorActual().getMano().remove(num);
		p.jugadorSiguiente();
		numJugadas++;
		
	}
	
	private boolean tieneCartasDelPalo(String palo) {
		for(int i=0; i<p.getJugadorActual().getMano().size(); i++){
			if (palo == p.getJugadorActual().getMano().get(i).getPalo())
				return true;
		}
		return false;
	}
	
	private void limpiarTVs() {
		// TODO Auto-generated method stub
		for(int i=0; i<6; i++){
			tvcm[i].setText("");
			if(i<4)
				tvj[i].setText("");
		}
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.prueba);
		b0 = (Button) findViewById(R.id.b0);
		b0.setOnClickListener(new OnClickListener() { //Jugar Carta
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//if(et0.getText().toString().length() != 0){
				int num = Integer.parseInt(et0.getText().toString());
				
				//showToast(String.valueOf(num));
				if(p.getRondas() < 4){
					if (numJugadas < 4){
						if (num >= 0 && num <p.getJugadorActual().getMano().size()){
							nuevaJugada(num);
						}
					}
				}
				else{ // Arrastre
					
					if (num >= 0 && num <p.getJugadorActual().getMano().size()){
						if (numJugadas != 0){ //Si no es la primera
							ganadora_actual = new Jugada(p.jugadaGanadora(jugadas, numJugadas, false));
							String palo_arrastra = jugadas[0].getCartaJugada().getPalo();
							if(tieneCartasDelPalo(palo_arrastra)){ // Tiene cartas del palo que arrastra
								if(p.getJugadorActual().getMano().get(num).getPalo() != palo_arrastra){ // Si no esta jugando una carta de ese palo
									showToast("Arrastre", "Estas obligado a tirar "+ palo_arrastra);
								}
								else{ //Si que tira del palo que arrastra
									nuevaJugada(num);
								}
							}
							else{ //No tiene cartas del palo que arrastra
								if(palo_arrastra == p.getTriunfo().getPalo()){ //El palo que arrastra es triunfo
									if(tieneCartasDelPalo(palo_arrastra)){ // Si tiene triunfos
										if(p.getJugadorActual().getMano().get(num).getPalo() != palo_arrastra){ // Si no esta jugando una carta de ese palo
											showToast("Arrastre", "Estas obligado a tirar "+ palo_arrastra);
										}
										else{ //Si que tira del palo que arrastra
											nuevaJugada(num);
										}
									}
									else{ // Si no tiene triunfos
										nuevaJugada(num);
									}
								}
								else{ //El palo que arrastra no es triunfo
									if(tieneCartasDelPalo(palo_arrastra)){
										if(p.getJugadorActual().getMano().get(num).getPalo() != palo_arrastra){ // Si no esta jugando una carta de ese palo
											showToast("Arrastre", "Estas obligado a tirar "+ palo_arrastra);
										}
										else{ //Si que tira del palo que arrastra
											nuevaJugada(num);
										}
									}
									else{ // No tiene cartas del palo que arrastra
										if(ganadora_actual.getJugador().esMismoEquipo(p.getJugadorActual()) ){ //Si va ganando su compañero
											nuevaJugada(num);
										}
										else{ // Si van perdiendo
											if(tieneCartasDelPalo(p.getTriunfo().getPalo())){ //Tiene triunfos
												if(p.getJugadorActual().getMano().get(num).getPalo() != p.getTriunfo().getPalo()){ // Si no esta jugando un triunfo
													showToast("Arrastre", "Estas obligado a tirar triunfo");
												}
												else{ //Si que tira triunfo
													nuevaJugada(num);
												}
											}
										}
									}
								}
							}
						}
						else{ // es el primero en tirar en el arrastre
							nuevaJugada(num);
						}
					}
				}
			//}
			}
		});
	
		resuelve = (Button) findViewById(R.id.resuelve);
		resuelve.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {  //Resuelve jugada
				// TODO Auto-generated method stub
				if(numJugadas == 4){
					Jugada ganadora = new Jugada(p.resuelveTurno(jugadas));
					showToast("Ganadora", "Gana " +  ganadora.getJugador().toString() + " con " + ganadora.getCartaJugada().toString());
					Arrays.fill(jugadas, null);
					idJugadorUltimaBaza = ganadora.getJugador().getId();
					numJugadas = 0;
					tvCartasBaraja.setText("Cartas Baraja " + (p.getMibaraja().numCartasBaraja()));
					tvRondas.setText("Rondas " + p.getRondas());
					limpiarTVs();
				}
			}
		});
		
		vermano = (Button) findViewById(R.id.vermano);
		vermano.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				tvJugador.setText(p.getJugadorActual().toString());
				for(int i=0; i<p.getJugadorActual().getMano().size(); i++){
					tvcm[i].setText(i + ": " + p.getJugadorActual().getMano().get(i).toString());
				}
			}
		});
		
		cambia = (Button) findViewById(R.id.cambia);
		cambia.setOnClickListener(new OnClickListener() {
			
			public void onClick(View arg0) {
				boolean cambiado = false;
				// TODO Auto-generated method stub
				if(idJugadorUltimaBaza == p.getIdJugador() || (idJugadorUltimaBaza+2)%4 == p.getIdJugador()){ //Si han ganado baza
					for(int i=0;i<p.getJugadorActual().getMano().size();i++){
						if(p.getJugadorActual().getMano().get(i).getPalo()==p.getTriunfo().getPalo()){
							if (p.getJugadorActual().getMano().get(i).getNumero() == 7){
								cambiado = true;
								showToast("Cambio", p.getJugadorActual().toString() + " cambia " + p.getJugadorActual().getMano().get(i).toString() + " por " + p.getTriunfo().toString());
								p.getJugadorActual().getMano().add(p.getTriunfo());
								p.setTriunfo(p.getJugadorActual().getMano().get(i));
								p.getJugadorActual().getMano().remove(i);
								tvTriunfo.setText("Triunfo " + p.getTriunfo().toString());
							}
						}
					}
					if(cambiado == false){
						showToast("Cambio", "Solo se puede cambiar el triunfo por el 7 de " + p.getTriunfo().getPalo());
					}
				}
				else{
					showToast("Cambio", "Es necesario ganar baza antes");
				}
			}
		});
		
		canta = (Button) findViewById(R.id.canta);
		canta.setOnClickListener(new OnClickListener() {
			
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				String paloQueCanta = "";
				boolean sota;
				boolean rey;
				
				if(idJugadorUltimaBaza == p.getIdJugador() || (idJugadorUltimaBaza+2)%4 == p.getIdJugador()){ //Si han ganado baza
					for(String palo:p.getMibaraja().palos){
						sota = rey = false;
						for(int i=0;i<p.getJugadorActual().getMano().size();i++){
							if(p.getJugadorActual().getMano().get(i).getNumero() == 10){
								if(p.getJugadorActual().getMano().get(i).getPalo() == palo){
									sota = true;
								}
							}
							if(p.getJugadorActual().getMano().get(i).getNumero() == 12){
								if(p.getJugadorActual().getMano().get(i).getPalo() == palo){
									rey = true;
								}
							}
						}
						if(sota && rey){
							paloQueCanta = palo;
						}
					}
					if(paloQueCanta.length() != 0){
						if(paloQueCanta == p.getTriunfo().getPalo()){
							showToast("Cante", p.getJugadorActual().toString() + " canta las 40");
							p.getJugadorActual().sumaPuntuacion(40);
						}
						else{
							showToast("Cante", p.getJugadorActual().toString() + " canta las 20 en " + paloQueCanta);
							p.getJugadorActual().sumaPuntuacion(20);
						}
					}
					else{
						showToast("Cante","No tienes sota y rey del mismo palo");
					}
				}
				else{
					showToast("Cante", "Es necesario ganar baza antes");
				}
			}
		});
		
		et0 = (EditText) findViewById(R.id.et0);	
		p = new Partida();
		p.comenzarPartida();
		jugadas = new Jugada[4];
		numJugadas = 0;
		
		showToast("Triunfo", "Triunfo " + p.getTriunfo().toString());
		tvCartasBaraja = (TextView) findViewById(R.id.tvCartasBaraja);
		tvCartasBaraja.setText("Cartas Baraja " + (p.getMibaraja().numCartasBaraja()));
		tvTriunfo = (TextView) findViewById(R.id.tvTriunfo);
		tvTriunfo.setText("Triunfo " + p.getTriunfo().toString());
		tvRondas = (TextView) findViewById(R.id.tvRondas);
		tvRondas.setText("Rondas " + p.getRondas());
		
		tvJugador = (TextView) findViewById(R.id.tvJugador);
		ll_h_col2 = (LinearLayout) findViewById(R.id.ll_h_col2);
		ll_h_col3 = (LinearLayout) findViewById(R.id.ll_h_col3);
		tvcm = new TextView[6];
		tvj = new TextView[4];
		for(int i=0; i<6; i++){
			tvcm[i] = new TextView(getApplicationContext());
			tvcm[i].setText("");
			ll_h_col2.addView(tvcm[i]);
			if(i<4){
				tvj[i] = new TextView(getApplicationContext());
				tvj[i].setText("");
				ll_h_col3.addView(tvj[i]);
			}
		}
		
		tvJugador.setText(p.getJugadorActual().toString());
		idJugadorUltimaBaza = -10; //Valor que no influya en las comprobaciones
		
	}




}
